#include <sys_head.h>

int main(int argc, char const *argv[])
{
    // ftok函数会把我们出入的两个参数通过某种算法生成一串秘钥
    key_t key = ftok("/home/student/桌面",1001);

    //创建一个拥有一盏灯的信号灯集合
    int id = semget(key,2,0666);

    // //控制具体的某一盏灯
    // int val = 1;
    // semctl(id,0,SETVAL,val);

    while (1)
    {
        struct sembuf sb;
        sb.sem_num = 1;//信号灯集合中的第几盏灯
        sb.sem_op = -1;//如果等到了信号灯资源，我们对这个信号灯进行什么样的操作，这里-1操作（用掉一个信号灯资源）
        sb.sem_flg = 0;//0代表等待信号灯，否则不管是否有资源程序都会往下走
        semop(id,&sb,1);//执行结构体所指定的操作，最后一个参数代表当前操作的灯的数量

        printf("2222222222\n");

        sb.sem_num = 0;
        sb.sem_op = 1;//执行释放操作，让灯的资源+1
        semop(id,&sb,1);//执行结构体所指定的操作，最后一个参数代表当前操作的灯的数量
    }
    //释放信号灯集
    //semctl(id,0,IPC_RMID);
    //semctl(id,1,IPC_RMID);
    return 0;
}
